'''
# encoding=utf-8

'''
import warnings

warnings.filterwarnings('ignore')
#显示中文
from pylab import *  #显示中文

mpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
#画图中显示负号
import matplotlib

matplotlib.rcParams['axes.unicode_minus'] = False

from sklearn.cluster import KMeans
import pandas as pd
from sklearn.metrics import silhouette_score

# 针对k-means算法，做如下操作：
# 1.	读取数据集drink.txt（10分）
data = pd.read_csv('drink.txt')

# 2.	选择K-means算法最优k值
# a)	使用循环，k值分别为2-9（10分）
sse = []  #记录sse
sil = []  #记录轮廓系数
for i in range(2,10):
    # b)	创建K-means模型（10分）
    kmeans = KMeans(i)
    # c)	拟合数据信息（10分）
    kmeans.fit(data)
    # d)	计算各k值的sse数值，并存入肘部法计算列表中（10分）
    sse.append(kmeans.inertia_)
    # e)	将k-means运算结果进行记录（10分）
    labels = kmeans.labels_
# f)	计算各k值的轮廓系数，并存入到另一个列表中（10分）
    sil.append(silhouette_score(data, labels))

# 3.	图像绘制
# a)	绘制肘部法图像（10分）
fig, ax = plt.subplots(2,1)
ax[0].set_title('肘部法则')
ax[0].set_xlabel('簇数')
ax[0].set_ylabel('SSE')
ax[0].plot(range(2,10), sse, 'ro-')
# b)	绘制罗阔系数图像（10分）
ax[1].set_title('轮廓系数')
ax[1].set_xlabel('簇数')
ax[1].set_ylabel('轮廓系数')
ax[1].plot(range(2,10), sil, 'bo-')
plt.show()

# c)	说明K值选择原则（10分）
#SSE越小越好, 轮廓系数越接近于1, 越大越好
